// 封装树形数据处理
// 核心思想：寻找父节点的过程，通过pid 去匹配id 如果匹配上了就把当前项push 到匹配项的children 属性中
// 固定实现步骤：
// 1. 循环遍历数组，以数组中每一项的id 作为key ，每一项本身作为value 形成一个新对象
// 2. 遍历数组，以数组中的每一项的pid 去第一步形成的对象中匹配id 如果匹配上了，就代表它的子节点，
// 然后push 到children 属性中，如果匹配不到，就代表他是最外层的父节点，直接push 到最终产出的树形数组中

function transTree(arr) {
  // 创建新的数组
  const treeArr = []
  // 创建对象
  const map = {}
  // 遍历数组
  arr.forEach(item => {
    map[item.id] = item
    item.children = []
  })

  arr.forEach(item => {
    if (map[item.pid]) {
      map[item.pid].children.push(item)
    } else {
      treeArr.push(item)
    }
  })

  return treeArr
}

export default transTree
